import uuid

from docxtpl import DocxTemplate
import time
import os
import subprocess
from utils.OssUtil import put_object
# 加载模板
doc_templates = [DocxTemplate("files/template/zifang.docx"), DocxTemplate("files/template/ziying.docx")]

PDF_DIR = 'files/pdf/'
WORD_DIR = 'files/word/'

# pdf目录不存在就新建
if not os.path.exists(PDF_DIR):
    os.makedirs(PDF_DIR, exist_ok=True)
# word
if not os.path.exists(WORD_DIR):
    os.makedirs(WORD_DIR, exist_ok=True)

def generate_pdf(data, temp_index,key):
    # 确定模板
    doc = doc_templates[temp_index]

    # 渲染模板
    doc.render(data)

    # 用uuid作为
    timestamp = str(uuid.uuid4())




    # 保存临时的 Word 文件
    file_name = f'{timestamp}_{temp_index}'
    temp_docx = f"{PDF_DIR}{file_name}.docx"

    # 临时pdf文件名，必须和word保持一一致因为LibreOffice 会用默认名
    pdf_name = f"{file_name}.pdf"
    output_pdf = f"{PDF_DIR}{pdf_name}"

    doc.save(temp_docx)

    print(f"WORD 文件已生成: {output_pdf}")

    #等待1秒
    time.sleep(1)

    oss_key = f'{temp_index}/{key}.pdf'

    # 使用 LibreOffice 转换文档
    try:
        subprocess.run([
            'soffice',
            '--headless',
            '--convert-to', 'pdf',
            '--outdir', PDF_DIR,
            temp_docx
        ], check=True)

        print(f"PDF 文件已生成: {output_pdf}")

        #上传到OSS

        put_object(output_pdf, oss_key)
        print(f'上传OSS成功{oss_key}')
            
    except subprocess.CalledProcessError as e:
        print(f"转换过程中出错: {e}")
        raise
    finally:
        # 删除临时的 Word 文件
        if os.path.exists(temp_docx):
            os.remove(temp_docx)
            print(f"临时 Word 文件已删除: {temp_docx}")

        # 删除临时的 PDF 文件
        if os.path.exists(output_pdf):
            os.remove(output_pdf)
            print(f"临时 PDF 文件已删除: {output_pdf}")


    return oss_key

if __name__ == '__main__':
    generate_pdf({'f1':'0','f2':'1'}, 0)





